package com.feng.designpattern.strategy.sortarray;

/**
 * 
 * 选择法:
 * 该方法只是通过遍历集合记录最小（大）元素的位置，一次遍历完后，再进行交换位置操作，类似冒泡，但在比较过程中，不进行交换操作，只记录元素位置。一次遍历只进行一次交换操作。这个对与交换次序比较费时的元素比较适合。这种排序法比冒泡法要城府要深的多,我先记住极端数据,待遍历数据完了之后,我再处理,不像冒泡法那样只要比自己极端一点的就要处理,选择法只处理本身范围内的最极端数据.
 * 
	public static int[] xuanze(int[] data) {
		int temp;
		for (int i = 0; i < data.length; i++) {
			int lowIndex = i;
			for (int j = data.length - 1; j > i; j--) {
				if (data[j] < data[lowIndex]) {
					lowIndex = j;
				}
			}
			temp = data[i];
			data[i] = data[lowIndex];
			data[lowIndex] = temp;
		}
		return data;
	}
 */
public class SelectionSort extends SortStrategy {
	public void sort(int[] data) {
		int temp;
		// 选择排序法(Selection Sort)
		long begin = System.currentTimeMillis();
		for (int k = 0; k < 1000000; k++) {
			for (int i = 0; i < data.length; i++) {
				for (int j = i; j < data.length; j++) {
					if (data[j] > data[i]) {
						temp = data[i];
						data[i] = data[j];
						data[j] = temp;
					}
				}

			}
		}
		long end = System.currentTimeMillis();
		System.out.println("选择法用时为：" + (end - begin));
		// 打印排序好的结果
		for (int i = 0; i < data.length; i++) {
			System.out.println(data[i]);
		}
	}
}
